package com.chilly.other.jvm;

/**
 * 垃圾：虚拟机中不再使用的空间就是垃圾
 *
 * 要进行垃圾回收，如何判断一个对象是否可以被回收?
 * 1、引用计数法：很难解决对象之间相互引用的问题
 * 2、根据根节点做可达性分析： 通过一系列GC Root的对象作为起点，从GC Root对象往下搜索，如果一个对象没有任何被引用的，
 *      就可以被回收
 *
 * 哪些对象可以作为GC Roots对象？
 * 1、虚拟机栈中的局部变量（局部变量表）引用的对象 ，例如下面的 gc1
 * 2、方法区中的，类的静态变量 例如下面的 gc2、常量引用的对象 例如下面的 gc3
 * 3、本地方法栈中引用的对象
 *
 *
 * Created by Chilly Cui on 2020/12/8.
 */
public class GCRootDemo {
    private byte[] byteArray = new byte[100*1024*1024];
    private static GCRootDemo gc2;
    private static final GCRootDemo gc3 = new GCRootDemo();

    public static void m1(){
        GCRootDemo gc1 = new GCRootDemo();
        System.gc();
        System.out.println("第一次GC完成");
    }

    public static void main(String[] args) {
        m1();
    }

    /*解释：
    gc1:是虚拟机栈中的局部变量
    gc2:是方法区中类的静态变量
    gc3:是方法区中的常量
    都可以作为GC Roots 的对象。
    */
}
